class yf {
  // 数组对象去重 根据value去重
  dupRem(arr, value) {
    let hash = {}
    return arr.reduce((a, b) => {
      hash[b[value]] ? '' : (hash[b[value]] = a.push(b))
      return a
    }, [])
  }
  
  // 数组对象根据指定排序数字为从小到大，汉字字母则是a，b，c，英文同汉字一起 则汉字在前 英文在后
  arrSorting(arr, val) {
    return arr.sort((a, b) => {
      if (typeof a[val] === 'string') {
        return a[val].localeCompare(b[val])
      } else {
        return a[val] - b[val]
      }
    })
  }
  // 普通数组去重 bl传入布尔值，true为顺序 false为默认 默认为false
  arrDupRem(arr, bl) {
    return bl ? arr.filter((val, index) => arr.indexOf(val) === index).sort((a, b) => a - b) : arr.filter((val, index) => arr.indexOf(val) === index)
  }
  // 拿出数组对象中指定的值，可以拿多维数组 会一直遍历下去
  arrObj(arr, value) {
    Array.prototype.fuli = function () {
      const arr = this.map((val) => {
        if (Array.isArray(val)) {
          return val.fuli()
        }
        return val[value] ? val[value] : val
      })
      return [].concat(...arr)
    }
    return arr.fuli()
  }
  // 多维数组去重并且扁平化
  mulArrDupRem(arr) {
    arr = arr.flat(Infinity).sort((a, b) => a - b)
    return this.arrDupRem(arr)
  }
  // 清除字符串里面的空格，如果只是左右有空格可以直接用trim
  strRemSpace(str) {
    return str.replace(/\s/g, '')
  }
  // 选出字符串中的数字bl传入布尔值true则为找出字母，false则为数字 默认为false
  strNumber(str, bl) {
    return bl ? str.replace(/\d/g, '') : str.replace(/\D/g, '')
  }
  // 替换指定字符
  strIn(str, strs, str1) {
    return str.replace(eval('/' + strs + '/g'), str1)
  }
  // 节流和防抖fn调用的方法，day延迟多久
  throtStab(fn, day) {
    let hsah = null
    return function () {
      if (hsah !== null) {
        clearTimeout(hsah)
      }
      hsah = setTimeout(() => {
        fn.call(this)
      }, day)
    }
  }
  // 找出对象最里面的每一个子孩子obj对象，val查找的是否又此子对象返回的是每一项的子对象里面的值
  objRecursive(obj, val) {
    let arr = []
    Object.prototype.recur = function () {
      arr.push(this)
      setTimeout(()=>{
        delete this[val]
      },500)
      if (this[val]) {
        return this[val].recur()
      }
      return arr
    }
    return obj.recur()
  }
}
export default yf
